﻿//-----------------------------------------------------------------------------
// <copyright file="IDisplayMessage.cs" company="William E. Kempf">
//     Copyright (c) William E. Kempf.
// </copyright>
//-----------------------------------------------------------------------------

namespace Onyx.Windows
{
    using System;
    using System.Windows;

    /// <summary>
    /// Defines a service used to display messages to the user.
    /// </summary>
    public interface IDisplayMessage
    {
        /// <summary>
        /// Displays a message to the user, typically as a message box.
        /// </summary>
        /// <param name="messageBoxText">A <see cref="String"/> that specifies the text to display.</param>
        /// <returns>
        /// A <see cref="MessageBoxResult"/> value that specifies which message box button was clicked by the user.
        /// </returns>
        MessageBoxResult ShowMessage(string messageBoxText);

        /// <summary>
        /// Displays a message to the user, typically as a message box.
        /// </summary>
        /// <param name="messageBoxText">A <see cref="String"/> that specifies the text to display.</param>
        /// <param name="caption">A <see cref="String"/> that specifies the title bar caption to display.</param>
        /// <returns>
        /// A <see cref="MessageBoxResult"/> value that specifies which message box button was clicked by the user.
        /// </returns>
        MessageBoxResult ShowMessage(string messageBoxText, string caption);

        /// <summary>
        /// Displays a message to the user, typically as a message box.
        /// </summary>
        /// <param name="messageBoxText">A <see cref="String"/> that specifies the text to display.</param>
        /// <param name="caption">A <see cref="String"/> that specifies the title bar caption to display.</param>
        /// <param name="button">A <see cref="MessageBoxButton"/> value that specifies which button or buttons to display.</param>
        /// <returns>
        /// A <see cref="MessageBoxResult"/> value that specifies which message box button was clicked by the user.
        /// </returns>
        MessageBoxResult ShowMessage(string messageBoxText, string caption, MessageBoxButton button);

#if WPF
        /// <summary>
        /// Displays a message to the user, typically as a message box.
        /// </summary>
        /// <param name="messageBoxText">A <see cref="String"/> that specifies the text to display.</param>
        /// <param name="caption">A <see cref="String"/> that specifies the title bar caption to display.</param>
        /// <param name="button">A <see cref="MessageBoxButton"/> value that specifies which button or buttons to display.</param>
        /// <param name="icon">A <see cref="MessageBoxImage"/> value that specifes the icon to display.</param>
        /// <returns>
        /// A <see cref="MessageBoxResult"/> value that specifies which message box button was clicked by the user.
        /// </returns>
        MessageBoxResult ShowMessage(string messageBoxText, string caption, MessageBoxButton button, MessageBoxImage icon);

        /// <summary>
        /// Displays a message to the user, typically as a message box.
        /// </summary>
        /// <param name="messageBoxText">A <see cref="String"/> that specifies the text to display.</param>
        /// <param name="caption">A <see cref="String"/> that specifies the title bar caption to display.</param>
        /// <param name="button">A <see cref="MessageBoxButton"/> value that specifies which button or buttons to display.</param>
        /// <param name="icon">A <see cref="MessageBoxImage"/> value that specifes the icon to display.</param>
        /// <param name="defaultResult">A <see cref="MessageBoxResult"/> value that specifies the default result of the message box.</param>
        /// <returns>
        /// A <see cref="MessageBoxResult"/> value that specifies which message box button was clicked by the user.
        /// </returns>
        MessageBoxResult ShowMessage(
            string messageBoxText,
            string caption,
            MessageBoxButton button,
            MessageBoxImage icon,
            MessageBoxResult defaultResult);

        /// <summary>
        /// Displays a message to the user, typically as a message box.
        /// </summary>
        /// <param name="messageBoxText">A <see cref="String"/> that specifies the text to display.</param>
        /// <param name="caption">A <see cref="String"/> that specifies the title bar caption to display.</param>
        /// <param name="button">A <see cref="MessageBoxButton"/> value that specifies which button or buttons to display.</param>
        /// <param name="icon">A <see cref="MessageBoxImage"/> value that specifes the icon to display.</param>
        /// <param name="defaultResult">A <see cref="MessageBoxResult"/> value that specifies the default result of the message box.</param>
        /// <param name="options">A <see cref="MessageBoxOptions"/> value object that specifies the options.</param>
        /// <returns>
        /// A <see cref="MessageBoxResult"/> value that specifies which message box button was clicked by the user.
        /// </returns>
        MessageBoxResult ShowMessage(
            string messageBoxText,
            string caption,
            MessageBoxButton button,
            MessageBoxImage icon,
            MessageBoxResult defaultResult,
            MessageBoxOptions options);
#endif
    }
}
